// const babel  = require("babel-core");
const t  = require("babel-types");
const visitor={
    BinaryExpression(path){
        const node=path.node;
        let result;
        //判断表达式两边，是否都是数字
        if(t.isNumericLiteral(node.left) && t.isNumericLiteral(node.right)){
            //根据不同的操作运算符作运算
            switch (node.operator) {
                case "+":
                    result=node.left.value+node.right.value;
                    break;
                case "+":
                    result=node.left.value+node.right.value;
                    break;
                case "-":
                    result=node.left.value-node.right.value;
                    break;
                case "*":
                    result=node.left.value*node.right.value;
                    break;
                case "/":
                    result=node.left.value/node.right.value;
                    break;
                case "**":
                    let i=node.right.value;
                    while (--i) {
                        result=result||node.left.value;
                        result=result*node.left.value
                    }
                    result=node.left.value+node.right.value;
                    break;
                default:
                    break;
            }
        }
        //如果上面的运算有结果的话
        if(result!==undefined){
            //把表达式节点替换成number字面量
            path.replaceWith(t.numericLiteral(result))
            let parentPath=path.parentPath;
            //向上遍历父节点
            parentPath && visitor.BinaryExpression.call(this,parentPath)
        }
    }
}

// module.exports=function(babel){
//     return {
//         visitor
//     }
// }
export default function(babel){
    return {
        visitor
    }
}